using Sirenix.OdinInspector;
using UnityEngine;

namespace Modules.Gate
{
    /*
        GateAgent 类用于管理门的状态。
        包含初始化、打开、关闭和恢复门状态的方法。
    */
    [System.Serializable]
    public class GateAgent
    {
        [HorizontalGroup("First", LabelWidth = 40, PaddingLeft = 5)] [SerializeField]
        private string label; // 门的标签，用于标识这个门代理。


        [HorizontalGroup("First", LabelWidth = 40, PaddingLeft = 10)] [SerializeField]
        private string group;

        [HorizontalGroup("Second", LabelWidth = 40, PaddingLeft = 5)] [SerializeField]
        private GateBase gate; // 需要被控制的门基类引用。

        [HorizontalGroup("Second", Width = 20, PaddingLeft = 14, PaddingRight = 10), HideLabel] [SerializeField]
        private bool isOpened; // 标记门是否处于打开状态(默认值)。


        public string Group => group;

        /// <summary>
        /// 返回门的标签。
        /// </summary>
        public string Label => label;

        public GateBase Gate => gate;


        /// <summary>
        /// 初始化方法，恢复门的状态。
        /// </summary>
        public void Init()
        {
            Reset();
        }

        /// <summary>
        /// 打开门的方法。
        /// </summary>
        public void Open() => gate.Open();

        /// <summary>
        /// 关闭门的方法。
        /// </summary>
        public void Close() => gate.Close();

        /// <summary>
        /// 根据isOpened状态恢复门的状态。
        /// </summary>
        public void Reset()
        {
            if (isOpened)
                gate.Open();
            else
                gate.Close();
        }
    }
}